#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import requests #需要安装python-pip，然后再安装requests，centos8安装python2-pip，再用pip2安装requests
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr


#写文件
def write_file(str) :
    with open('data.txt','w') as f: #这种写法，会自动关闭文件
        f.write(str) #write会覆盖旧数据，只保留最后一次写入的数据

#读文件
def read_file():
    str = ''
    try:
        with open('data.txt','r') as f:
            str = f.read()
    except:
        str = ''
    return str

#获取公网ip
def get_out_ip() :
    url = r'http://www.trackip.net/'
    r = requests.get(url)
    txt = r.text
    ip = txt[txt.find('title')+6:txt.find('/title')-1]
    return (ip)


currIp = ''
oldIp = ''
#将以上三个参数填上即可直接使用
my_sender='xxx@163.com'    # 发件人邮箱账号 需要到163邮箱里开启POP3/SMTP才可以发送
my_pass = 'abcdef'              # 发件人邮箱校验码，非密码，即在邮箱中开启POP3/SMTP时，会生成此码
my_user='yyy@qq.com'      # 收件人邮箱账号
def mail():
    ret=True
    try:
        msg=MIMEText(currIp,'plain','utf-8') #这里为邮件内容，可以将ip放在这里
        msg['From']=formataddr(["TestLinux",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To']=formataddr(["FK",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject']="hei,ip " + currIp                # 邮件的主题，也可以说是标题
        
        server=smtplib.SMTP_SSL("smtp.163.com", 465)  # 发件人邮箱中的SMTP服务器，端口是25  SSL为465端口，不同的邮箱请自行百度
        #server.set_debuglevel(1)
        server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()  # 关闭连接
    except Exception:  # 如果 try 中的语句没有执行，则会执行下面的 ret=False
        ret=False
    return ret
 
currIp = get_out_ip()
oldIp = read_file();
if currIp == oldIp :
    print("ip没变化")
else:
    ret=mail()
    if ret:
        print("邮件发送成功")
        #需要将数据写入文件
        write_file(currIp)
    else:
        print("邮件发送失败")